package filter;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * <li>核心退出业务控制
 * <li>首先得明白，在服务器端是不能直接删除客户端的cookie。
 * <li>1 它采取的方式是在服务端设置cookie.setMaxAge(0)，
 * <li>2 再通过 response.addCookie(cookie) 将这个值返回到客户端后，
 * <li>3 客户端就知道自己的cookie没用了，再删除它。 
 * <li>4 故 response.addCookie(cookie); 不能省略，它是一个告知的功能
 * <li> 做一下对比理解：
 * <li>        好比 商场不能直接扔掉客户的的会员卡（会员卡相当于cookie），
 * <li>        它只能设置客户的会员卡失效，
 * <Li>        客户知道会员卡失效后，自己才把卡扔掉（扔掉才相当于删除cookie的功能）。
 */
//@WebServlet("/LogoutServlet")
@SuppressWarnings("serial")
public class LogoutServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		// 移除session
		request.getSession().removeAttribute("user");
		// 创建cookie
		Cookie cookie = new Cookie("autologin", "msg");
		cookie.setPath(request.getContextPath());

		// 将cookie置为过期
		cookie.setMaxAge(0);
		response.addCookie(cookie);
		
		// 导航，重定向
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		doGet(request, response);
	}

}
